<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>解析器</title>
</head>

<body>
  <p>就是将模板解析成AST（抽象语法树）</p>
  <p>在解析器内部会分成很多小解析器，其中包括过滤器解析器，文本解析器和HTML解析器。然后通过一条主线将这些解析器组装在一起。</p>
  <p>在使用模版时，我们可以在其中使用过滤器，而过滤器解析器的作用就是来解析过滤器的。</p>
  <p>文本解析器就是来解析文本的。文本就是一个文字为什么还需要解析？？？？？？？</p>
  <p>文本可以是带变量 hello{{name}} 这样就需要文本解析器来解析这段文本，纯文本则不需要文本解析器。</p>
  <p>最后最重要的就是HTML解析器，他是解析器中最核心的模块，他的作用就是解析模版。每当解析到HTML标签的开始位置，结束位置，文本或者注释节点，都会触发钩子函数，然后将相关信息通过参数传递出来。</p>
  <p>主线上做的事就是监听HTML解析器。每当钩子函数触发，就生成一个对应的AST节点。生成AST前，会根据类型使用不同的方式生成不同的方式生成不同的AST。</p>
  <p>这个AST其实和vnode有点类似，都是使用Javascript中的对象来表示节点。</p>
  <p>当HTML解析器把所有的模版都解析完毕，AST也就生成好了。</p>
</body>

</html>